package com.ruoyi.common.utils;
import java.util.HashSet;
import java.util.Set;

/**
 * 解决片号从数据库中查询出来的格式和录入的格式不一致的问题
 *
 * @author yinjc
 */
public class LotCompontMerge {
    public static String summarizeData(Set<String> existingIds) {
        StringBuilder summary = new StringBuilder();
        boolean isFirst = true;
        int lastSeenId = 0;
        int count = 0;
        int size = existingIds.size();
        int lastNumCount = 0;

        for (int i = 1; i <= 25; i++) {
            // 生成编号，如 "#01"
            String expectedId = "#" + String.format("%02d", i);
            // 生成编号，如 "01#"
            String reverseId =  String.format("%02d", i) + "#";
            // 检查编号是否存在
            if (existingIds.contains(expectedId)) {
                // 如果不是第一个编号，且与前一个编号不连续，则添加前一个编号范围的结束
                if (!isFirst && (i - lastSeenId) > 1) {
                    String reverseId2 =  String.format("%02d", lastSeenId) + "#";
                    if (lastNumCount > 1) {
                        summary.append("-").append(reverseId2);
                        lastNumCount = 0;
                    }
                    summary.append(" ").append(reverseId);
                    lastSeenId = i;
                    count++;
                    lastNumCount = 1;
                }
                // 对于连续的编号（或第一个编号），只需添加起始编号即可（但在这里我们实际上添加的是期望的格式）
                if (!isFirst && (i - lastSeenId) == 1) {
                    lastSeenId = i;
                    count++;
                    lastNumCount++;
                    if (count == size) {
                        summary.append("-").append(reverseId);
                        break;
                    }
                }
                if(isFirst) {
                    summary.append(reverseId);
                    lastSeenId = i;
                    isFirst = false;
                    count++;
                    lastNumCount++;
                }
            }
        }
        String result = summary.toString();
        return result;
    }

    public static void main(String[] args) {
        // 示例数据
        Set<String> existingIds = new HashSet<>();
        existingIds.add("#01");
        existingIds.add("#02");
        existingIds.add("#03");

        existingIds.add("#08");

        existingIds.add("#12");

        existingIds.add("#14");
        existingIds.add("#15");
        existingIds.add("#16");
        existingIds.add("#17");
        existingIds.add("#18");

        existingIds.add("#20");
        existingIds.add("#21");

        String summary = summarizeData(existingIds);
        // 应输出: #01-#04 #06-#07（注意：这里我稍微修改了输出格式以匹配通常的编号表示）
        System.out.println(summary);

    }
}